package com.lee.util;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

import java.net.URI;

public class HadoopUtil {

    /**
     * 获取HDFS配置信息
     * @return configuration
     */
    public static Configuration getConfiguration() {
        return new Configuration();
    }

    /**
     * 获取HDFS文件系统对象
     * @return FileSystem
     */
    public static FileSystem getFileSystem() throws Exception {
        Configuration configuration = getConfiguration();
        // 客户端去操作hdfs时是有一个用户身份的，默认情况下hdfs客户端api会从jvm中获取一个参数作为自己的用户身份 DHADOOP_USER_NAME=hadoop
//        FileSystem hdfs = FileSystem.get(getHdfsConfig()); //默认获取
//        也可以在构造客户端fs对象时，通过参数传递进去
        return FileSystem.get(new URI(configuration.get("fs.defaultFS")), configuration, "hadoop");
    }

    public static Path getHdfsPath(String path) {
        Configuration configuration = getConfiguration();
        String nameNode = configuration.get("fs.defaultFS");
        if(!nameNode.endsWith("/")){
            nameNode += "/";
        }
        if(path.startsWith("/")){
            path = path.substring(1);
        }
        return new Path(nameNode + path);
    }

}
